package Others;

import java.util.Scanner;

/**
 * You enter a string into this program, and it will return how many words were in that particular
 * string
 *
 * @author Marcus
 */
public class CountWords {

  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter your text: ");
    String str = input.nextLine();

    System.out.println("Your text has " + wordCount(str) + " word(s)");
    System.out.println("Your text has " + secondaryWordCount(str) + " word(s)");
    input.close();
  }

  private static int wordCount(String s) {
    if (s == null || s.isEmpty()) return 0;
    return s.trim().split("[\\s]+").length;
  }

  /**
   * counts the number of words in a sentence but ignores all potential non-alphanumeric characters
   * that do not represent a word. runs in O(n) where n is the length of s
   *
   * @param s String: sentence with word(s)
   * @return int: number of words
   */
  private static int secondaryWordCount(String s) {
    if (s == null || s.isEmpty()) return 0;
    StringBuilder sb = new StringBuilder();
    for (char c : s.toCharArray()) {
      if (Character.isLetter(c) || Character.isDigit(c)) sb.append(c);
    }
    s = sb.toString();
    return s.trim().split("[\\s]+").length;
  }
}
